#pragma once

#include <iostream>
#include <string>
#include <functional>
#include <cstdio>

using namespace std ; 


typedef void* (*fun_t)(void*) ; 


class ThreadData 
{
public:

    void* _args  ;  //参数1  //如果还想向线程执行的函数中传入其他的数据，在此类中进行修改/添加成员变量即可
    string _name ;

};


class Thread
{
private: 
    
    string _name ; 
    fun_t  _func ;        // 线程执行的函数
    ThreadData _tdata ;  // 存储需要传入 _fun 函数里的参数
    pthread_t _tid;

public:

    Thread(int num, fun_t callback, void* agrs)
        :_func(callback)
    {
        char nameBuffer[64] ; // 线程名 缓冲区 
        snprintf(nameBuffer, sizeof nameBuffer , "Thread-%d" , num);
        _name = nameBuffer ; 

        _tdata._args = agrs ;
        _tdata._name = _name;
    }

    void start()
    {
        pthread_create(&_tid, nullptr, _func , (void*)&_tdata);
    }

    void join()
    {
        pthread_join(_tid, nullptr);
    }

    string name()
    {
        return _name ; 
    }

    ~Thread()
    {
        
    }

};






